package cn.tedu.oop;
/*本类用于测试代码块*/
public class TestBlock {
    public static void main(String[] args) {
        //System.out.println(666);//如果只是业务操作,没有创建对象,是不会执行构造方法的
        Pig p1 = new Pig();
        Pig p2 = new Pig("中午好");
        Pig p3 = new Pig("水果",3);
        p1.eat();
    }
}
//1.创建一个小猪类用来测试
class Pig{
    //2.定义属性
    String food;//食物
    int age;//年龄

    //4.创建本类的构造代码块
    {
        /*构造代码块:{}  //格式
         * 1.位置:类里方法外
         * 2.执行时机:每次创建对象时都会执行构造代码块,并且构造代码块优先于构造方法执行
         * 3.作用:用于提取所有构造方法(左右对象的共性)的共性功能(提高效率,解耦,效率)*/  //作用:用于提取所有构造方法的共性功能,,eg,
        System.out.println("我是一个构造代码块~");
        System.out.println("黑猪肉!");
    }
    //5.提供本类的构造方法
    public Pig(){
        System.out.println("无参构造");
        //System.out.println("黑猪肉!");
    }
    public Pig(String s){
        System.out.println("含参构造"+s);
        //System.out.println("黑猪肉!");
    }
    public Pig(String food, int age) {
        this.food = food;
        this.age = age;
        System.out.println("全参构造");
        //System.out.println("黑猪肉!");
    }

    //3.定义方法
    public void eat(){
        System.out.println("小猪爱吃菜叶子");
        //创建局部代码块
        {
            /*局部代码块:{}
             * 1.位置:方法里
             * 2.执行时机:调用局部代码块所处的方法时才会执行
             * 3.作用:用于控制变量的作用范围,变量的作用范围越小越好*/
            System.out.println("我是一个局部代码块");
            int i = 10;
            System.out.println(i);
        }
        //System.out.println(i);//出了局部代码块就用不了了
    }
}